#ifndef __REG2NFA_H_
#define __REG2NFA_H_

#include < string >
#include < iostream >
#include < stack >
#include < list >

#include "BlackBox.h"
#include "State.h"
#include "HelpSymbolGenerator.h"
#include "Transition.h"

using namespace std;

class Reg2NFA
{
public:
	Reg2NFA(void);
	~Reg2NFA(void);

	//methods
	void toNFA( string postExpr );
	list<Transition<string> > getAllTransitions();

private:
	/* constante voor het gebruik van een epsilon */
	static const char EPSILON = '$';
	/* tijdelijke stack die gebruikt wordt tijdens de conversie */
	stack< BlackBox > myStack;
	/* hier worden tijdelijk alle transities in opgeslagen tijdens het conversie proces */
	list< Transition< string > > allTransitions;
	/* lijsten van start en stop symbolen die nodig zijn voor de initialisatie van de nonfinauth klasse */
	list< string > nfaStartSymbols, nfaStopSymbols;
	HelpSymbolGenerator *symbolGenerator;


	/* voert een controle uit of het gaat om een startstate, zo ja...dan wordt deze geinitialiseerd */
	void checkStartState();
	void createTransition( string begin, string end, char expr );
	

	
};
#endif /* __REG2NFA_H_ */